package com.easygem.front.mapper;

import com.easygem.common.model.front.ResourceInfo;
import com.easygem.common.vo.front.ResourceInfoVO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * @author 何维佳
 * @version 1.0
 * @className ResourceInfoMapper
 * @Description TODO
 * @date 2024/12/23 14:58
 */
public interface ResourceInfoMapper extends Mapper<ResourceInfo>, com.easygem.business.mapper.Mapper<ResourceInfo> {
    /**
     * 多条件多表联查资源信息
     * @param resourceInfo
     * @return
     */
    public List<ResourceInfo> selectResourceInfoListByResourceInfo(ResourceInfo resourceInfo);

    /**
     * 多条件联表查询资源信息总数
     * @param resourceInfo
     * @return
     */
    Long selectResourceInfoListByResourceInfo_COUNT(ResourceInfo resourceInfo);

//    // 新增资源信息的方法
//    public int insertResourceInfo(ResourceInfo resourceInfo);
//
//    // 根据资源ID删除资源信息的方法
//    public int deleteResourceInfoById(Integer resourceId);
//
//    // 根据资源ID更新资源信息的方法
//    public int updateResourceInfoById(ResourceInfo resourceInfo);
//
//    // 根据多个ID批量删除资源信息的方法
//    public int deleteResourceInfosByIds(List<Integer> resourceIds);
//
//    // 统计资源信息总数量的方法
//    public int countResourceInfos();

    /**
     * 根据id搜索资源信息
     * @param Id
     * @return
     */
    List<ResourceInfo> selectResourceInfoListById(Long Id);

    /**
     * 修改资源信息
     * @param resourceInfoVO
     * @return
     */
    int updateResourceInfo(ResourceInfoVO resourceInfoVO);

    /**
     * 根据id删除资源信息
     * @param Id
     * @return
     */
    int deleteResourceInfoById(Long Id);

    /**
     * 添加资源进黑名单
     * @param resourceInfoVO
     * @return
     */
    int insertBlackList(ResourceInfoVO resourceInfoVO);

    /**
     * 添加资源进黑名单
     * @param resourceInfoVO
     * @return
     */
    int insertBlackListB(ResourceInfoVO resourceInfoVO);

    /**
     * 将资源转入公海
     * @param Id
     * @return
     */
    int insertHigh_seas_clientList(Long Id);

    /**
     * 通过多个resourceId查询所有resource
     * @param resourceInfo
     * @param ids
     * @return
     */
    List<ResourceInfo> findAllByResourceId(ResourceInfo resourceInfo, List<Long> ids);
    /**
     * 多条件多表联查资源信息
     * @param resourceInfo
     * @return
     */
    List<ResourceInfo> selectResourceInfoListByIsDelete(ResourceInfo resourceInfo);
    Long selectResourceInfoListByIsDelete_COUNT(ResourceInfo resourceInfo);

    /**
     * 得到多条件多表联查资源的id信息
     * @param resourceInfo
     * @return
     */
    List<Long> selectResourceInfoId(ResourceInfo resourceInfo);

    /**
     * 根据id集合多个删除customer_follow表的信息
     * @param resourceIds id集合
     * @return
     */
    Integer deleteCustomerFollowByIds(@Param("resourceIds") List<Long> resourceIds);
    /**
     * 根据id集合多个删除，批量或清空
     * @param resourceIds id集合
     * @return
     */
    Integer deleteResourceInfosByIds(@Param("resourceIds") List<Long> resourceIds);

    /**
     * 检查客户电话是否在黑名单中
     * @param clientPhone
     * @return
     */
//    int isBlacklist(String clientPhone,String loginAccount_name);
    int isBlacklist(String clientPhone);




    //客户

    /**
     * 按条件查询出回收站的客户信息
     * @param resourceInfo 对象
     * @return
     */
    List<ResourceInfo> selectAllCustomer(ResourceInfo resourceInfo);
    Long selectAllCustomer_COUNT(ResourceInfo resourceInfo);

    List<Long> selectCustomerId(ResourceInfo resourceInfo);
    Integer updateIsDelete(@Param("resourceIds") List<Long> resourceIds);
    //批量分配或分配
    Integer distributeCustomer(@Param("userId") Long userId,
                           @Param("resourceId") Long resourceId);



    //公海预警
    List<ResourceInfo> selectHighSeasClient(ResourceInfo resourceInfo);
    Long selectHighSeasClient_COUNT(ResourceInfo resourceInfo);


    //回收站预警
    List<ResourceInfo> selectRecycle(ResourceInfo resourceInfo);
    Long selectRecycle_COUNT(ResourceInfo resourceInfo);



    /**
     * 得到超级管理员的账号名称，并且状态为正常的
     * @return
     */
    List<String> getAccountNames();



    /**
     * 查询出到达转移公海日期的id
     * @return
     */
    List<Long> getHighSeasClientIdList(@Param("highSeasTime") Integer highSeasTime,@Param("accountName") String accountName);
    /**
     * 查询出到达清除回收站日期的id
     * @return
     */
    List<Long> getRecycleIdList(@Param("expiryDay") Integer expiryDay,@Param("accountName") String accountName);






    /**
     * 批量转公海
     * @param resourceIds id
     * @return
     */
    Integer insertHigh_seas_clientLists(@Param("resourceIds") List<Long> resourceIds);






    /**
     *  批量添加客户
     * @param resourceInfos 资源
     * @return 添加的数量
     */
    Integer batchAddResourceInfo(@Param("resourceInfos") List<ResourceInfo> resourceInfos);

    /**
     * 根据传入的电话号码列表，查询数据库中已存在的电话号码对应的记录
     * @param resourceInfos 电话号码列表
     * @return 电话号码对应的记录
     */
    List<ResourceInfoVO> findByPhoneNumbers(@Param("resourceInfos") List<ResourceInfoVO> resourceInfos);

    /**
     * 根据归属人编号查询客户编号
     * @param userId 归属人编号
     * @return 客户编号集合
     */
    List<Long> getCustomerIdByUserIds(@Param("userId") Long userId);

    /**
     * 根据归属人编号查询资源编号
     * @param userId 归属人编号
     * @return 资源编号集合
     */
    List<Long> getResourceIdByUserIds(@Param("userId") Long userId);

    /**
     * 根据客户编号集合，将客户转为资源
     * @param resourceIds 客户编号集合
     * @return 更新的数量
     */
    int updateResourceTagByResourceId(@Param("resourceIds") List<Long> resourceIds);


    /**
     * 根据任务包id修改任务包内资源归属账号
     * @param taskPackageId 任务包id
     * @return
     */
    int updateResourcesAccountNameByTackId(@Param("taskPackageId")Integer  taskPackageId,@Param("accountName") String accountName);

    /**
     * 根据电话号码列表查询资源ID
     * @param phones 电话号码列表
     * @return 资源ID列表
     */
    List<Long> findResourceIdsByPhones(@Param("phones") List<String> phones);

}
